package fitnesshub.mapper;

import com.github.pagehelper.Page;
import fitnesshub.pojo.dto.AddEquipmentDTO;
import fitnesshub.pojo.dto.EquipmentPageQueryDTO;
import fitnesshub.pojo.entity.Equipment;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface EquipmentMapper {
    /**
     * 设备分页查询
     * 根据传入的分页查询条件对象（EquipmentPageQueryDTO）查询设备信息，并返回分页后的结果
     *
     * @param equipmentPageQueryDTO 包含分页参数以及可选查询筛选条件的对象
     * @return Page<Equipment>对象，表示分页后的设备数据列表
     */
    Page<Equipment> pageQuery(EquipmentPageQueryDTO equipmentPageQueryDTO);

    /**
     * 根据设备ID查询单个设备信息
     * 通过设备的唯一标识符（ID）从数据库中获取对应的设备详细信息
     *
     * @param equipmentId 要查询的设备的唯一标识符（通常是数据库中的主键值）
     * @return Equipment对象，如果找到对应ID的设备，则返回该设备的详细信息实体；否则可能返回null（具体取决于实现逻辑）
     */
    @Select("select * from equipment where equipment_id = #{equipmentId}")
    Equipment getById(Integer equipmentId);

    /**
     * 插入一条新的设备记录到数据库中
     * 将传入的Equipment对象中的属性值插入到对应的数据库表字段中
     *
     * @param equipment 包含要插入的设备各项信息的实体对象
     */
    @Insert("insert into equipment (equipment_name, equipment_type, status, create_time, update_time,image)" +
            " VALUES " +
            "(#{equipmentName}, #{equipmentType}, #{status},#{createTime}, #{updateTime},#{image})")
    void insert(Equipment equipment);

    /**
     * 编辑（更新）设备信息
     * 根据传入的包含更新后信息的Equipment对象，更新数据库中对应的设备记录
     *
     * @param equipment 包含更新后设备信息的实体对象，通常其ID属性用于确定要更新的数据库记录
     */
    void update(Equipment equipment);

    /**
     * 根据设备ID删除设备记录
     * 根据传入的设备ID，从数据库中删除对应的设备记录
     *
     * @param equipmentId 要删除的设备的唯一标识符（通常是数据库中的主键值）
     */
    @Delete("delete from equipment where equipment_id = #{equipmentId}")
    void deleteById(Integer equipmentId);
}